﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;

namespace DataAccess
{
    public interface IDataAccess
    {
        #region Support Property & Method

        DatabaseType DatabaseType { get; }

        IDbConnection DbConnection { get; }

        IDbTransaction BeginTransaction();

        void Open();

        void Close();

        bool IsClosed { get; }

        #endregion

        #region ExecuteNonQuery

        int ExecuteNonQuery(CommandType commandType, string commandText);
        int ExecuteNonQuery(string commandText);
        int ExecuteNonQuery(string commandText, QueryParameterCollection commandParameters);
        int ExecuteNonQuery(DataRow row, SqlStruct sqlStruct);
        int ExecuteNonQuery(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
        int ExecuteNonQuery(CommandType commandType, string commandText, QueryParameterCollection commandParameters, DataRow row, SqlStruct sqlStruct);


        #endregion ExecuteNonQuery

        #region ExecuteDataSet

        DataSet ExecuteDataset(CommandType commandType, string commandText);
        DataSet ExecuteDataset(string commandText);
        DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
        DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters);

        DataSet ExecuteDataset(CommandType commandType, string commandText, string tableName);
        DataSet ExecuteDataset(string commandText, string tableName);
        DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters, string tableName);
        DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters, string tableName);

        DataSet ExecuteDataset(CommandType commandType, string commandText, DataSet ds);
        DataSet ExecuteDataset(string commandText, DataSet ds);
        DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters, DataSet ds);
        DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters, DataSet ds);

        DataSet ExecuteDataset(CommandType commandType, string commandText, DataSet ds, string tableName);
        DataSet ExecuteDataset(string commandText, DataSet ds, string tableName);
        DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters, DataSet ds, string tableName);
        DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters, DataSet ds, string tableName);
        DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters, DataSet ds, int startRecord, int maxRecords, string tableName);

        #endregion ExecuteDataSet

        #region ExecuteReader
        IDataReader ExecuteReader(CommandType commandType, string commandText);
        IDataReader ExecuteReader(string commandText);
        IDataReader ExecuteReader(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
        IDataReader ExecuteReader(string commandText, QueryParameterCollection commandParameters);

        #endregion ExecuteReader

        #region ExecuteScalar

        object ExecuteScalar(CommandType commandType, string commandText);
        object ExecuteScalar(string commandText);
        object ExecuteScalar(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
        object ExecuteScalar(string commandText, QueryParameterCollection commandParameters);

        #endregion ExecuteScalar

        #region ExecuteXmlReader

        XmlReader ExecuteXmlReader(CommandType commandType, string commandText);
        XmlReader ExecuteXmlReader(string commandText);
        XmlReader ExecuteXmlReader(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
        XmlReader ExecuteXmlReader(string commandText, QueryParameterCollection commandParameters);

        #endregion ExecuteXmlReader
    }
}
